﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using vudu.ClasesDominio;
using vudu.Logica.Excepciones;

namespace vudu.Datos.SqlServer
{
    public class SqlServerProfesor
    {
        Conexion conex = new Conexion();

        //Funcion que devuelve una lista ocn la info de Profesor
        #region ConsultarTodosLosProfesores usado por Materia y profesor
        public List<Profesor> ConsultarTodosLosProfesores()
        {
            List<Profesor> listaProfe = new List<Profesor>();

            SqlCommand command = new SqlCommand();

            conex.AbrirConexionBd();
            command.Connection = conex.ObjetoConexion();
            command.CommandType = System.Data.CommandType.Text;
            command.CommandText = "SELECT * FROM PROFESOR ORDER BY apellidoProfesor";
            command.CommandTimeout = 10;

            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                Profesor profe = new Profesor();
                profe.Cedula = reader.GetInt32(0);
                profe.Nombre = reader["nombreProfesor"].ToString();
                profe.Apellido = reader["apellidoProfesor"].ToString();
                profe.Crn = reader.GetInt32(3);
                profe.Email = reader["emailProfesor"].ToString();
                profe.FechaNacimiento = reader.GetDateTime(5);
                profe.Sexo = reader["sexoProfesor"].ToString();
                profe.Telefono = reader["telefonoProfesor"].ToString();
                profe.TiempoLaboral = reader["contratoProfesor"].ToString();
                profe.Estatus = reader["estadoProfesor"].ToString();

                listaProfe.Add(profe);

            }
            reader.Close();
            conex.CerrarConexionBd();
            return listaProfe;
        }
        #endregion ConsultarTodosLosProfesores

        #region ConsultarTodosLosProfesoresDeEscuela usado por Profesor
        public List<Profesor> ConsultarTodosLosProfesoresDeEscuela(string miEscuela)
        {
            List<Profesor> listaProfe = new List<Profesor>();

            SqlCommand command = new SqlCommand();

            conex.AbrirConexionBd();
            command.Connection = conex.ObjetoConexion();
            command.CommandType = System.Data.CommandType.Text;
            command.CommandText = "SELECT DISTINCT Profesor.* FROM Escuela INNER JOIN EscuelaProfesor ON ";
            command.CommandText = command.CommandText + miEscuela + " = EscuelaProfesor.fk_Escuela INNER JOIN Profesor ON EscuelaProfesor.fk_Profesor ";
            command.CommandText = command.CommandText + "= Profesor.id_Cedula";
            command.CommandTimeout = 10;

            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                Profesor profe = new Profesor();
                profe.Cedula = reader.GetInt32(0);
                profe.Nombre = reader["nombreProfesor"].ToString();
                profe.Apellido = reader["apellidoProfesor"].ToString();
                profe.Crn = reader.GetInt32(3);
                profe.Email = reader["emailProfesor"].ToString();
                profe.FechaNacimiento = reader.GetDateTime(5);
                profe.Sexo = reader["sexoProfesor"].ToString();
                profe.Telefono = reader["telefonoProfesor"].ToString();
                profe.TiempoLaboral = reader["contratoProfesor"].ToString();
                profe.Estatus = reader["estadoProfesor"].ToString();


                listaProfe.Add(profe);

            }
            reader.Close();
            conex.CerrarConexionBd();
            return listaProfe;
        }
        #endregion ConsultarTodosLosProfesoresDeEscuela

        #region ConsultarListaProfesores usado por Profesor
        public List<Profesor> ConsultarListaProfesores()
        {
            List<Profesor> listaProfe = new List<Profesor>();

            SqlCommand command = new SqlCommand();

            conex.AbrirConexionBd();
            command.Connection = conex.ObjetoConexion();
            command.CommandType = System.Data.CommandType.Text;
            command.CommandText = "SELECT id_cedula as cedula, nombreProfesor as Nombre, apellidoProfesor as Apellido  FROM PROFESOR";
            command.CommandTimeout = 10;

            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                Profesor profe = new Profesor();
                profe.Cedula = reader.GetInt32(0);
                profe.Nombre = reader["Nombre"].ToString();
                profe.Apellido = reader["Apellido"].ToString();
                /*profe.Sexo = reader["sexoProfesor"].ToString();
                profe.Telefono = reader["telefonoProfesor"].ToString();
                profe.FechaNacimiento = reader.GetDateTime(6);
                profe.Estatus = reader["estadoProfesor"].ToString();
                profe.TiempoLaboral = reader["contratoProfesor"].ToString();
                //estos dos atributos agregar a la bd! para armar el objeto
                profe.EspacioMaxCarga = reader.GetInt32(11);
                profe.EspacioUtilizado = reader.GetInt32(12);
                */
                listaProfe.Add(profe);

            }
            reader.Close();
            conex.CerrarConexionBd();
            return listaProfe;
        }
        #endregion ConsultarListaProfesores

        #region ConsultarProfesor usado por Materia y Profesor
        public Profesor ConsultarProfesor(String codigo, int tipoConsulta)
        {

            //esta funcion devuelve el profesor que se desea consultar, si tipo de consulta es 1 consulta por nombre
            //si es 2 consulta por cedula, el codigo que es un string debe coincidir con la seleccion de tipoConsulta
            //si se consulta por nombre codigo debe tener un nombre si se consulta por cedula debe tener una cedula
            Profesor profesor = new Profesor();
            SqlCommand command = new SqlCommand();
            command.Connection = conex.ObjetoConexion();
            command.CommandType = System.Data.CommandType.Text;
            if (tipoConsulta == 1)
                command.CommandText = "SELECT * FROM PROFESOR P WHERE P.nombreProfesor = '" + codigo + "'";
            else if (tipoConsulta == 2)
                command.CommandText = "SELECT * FROM PROFESOR P WHERE P.id_Cedula = " + codigo;
            else
                return null;
            command.CommandTimeout = 10;
            try
            {
                conex.AbrirConexionBd();
                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    Profesor profe = new Profesor();
                    profe.Cedula = reader.GetInt32(0);
                    profe.Nombre = reader["nombreProfesor"].ToString();
                    profe.Apellido = reader["apellidoProfesor"].ToString();
                    profe.Crn = reader.GetInt32(3);
                    profe.Email = reader["emailProfesor"].ToString();
                    profe.FechaNacimiento = reader.GetDateTime(5);
                    profe.Sexo = reader["sexoProfesor"].ToString();
                    profe.Telefono = reader["telefonoProfesor"].ToString();
                    profe.TiempoLaboral = reader["contratoProfesor"].ToString();
                    profe.Estatus = reader["estadoProfesor"].ToString();
                    profesor = profe;
                }
                reader.Close();
                return profesor;
            }
            catch (SqlException ex)
            {
                return null;
            }
            catch (Exception ex)
            {
                return null;
            }
            finally
            {
                conex.CerrarConexionBd();
            }
        }
        #endregion ConsultarProfesor

        #region ConsultarPorMateriaProfesor .. no encuentro quien lo usa
        public Profesor ConsultarPorMateriaProfesor(String codigo, string miEscuela)
        {

            //esta funcion devuelve el profesor que se desea consultar, si tipo de consulta es 1 consulta por nombre
            //si es 2 consulta por cedula, el codigo que es un string debe coincidir con la seleccion de tipoConsulta
            //si se consulta por nombre codigo debe tener un nombre si se consulta por cedula debe tener una cedula
            Profesor profesor = new Profesor();
            SqlCommand command = new SqlCommand();
            command.Connection = conex.ObjetoConexion();
            command.CommandType = System.Data.CommandType.Text;

            /*command.CommandText = "SELECT Profesor.* FROM SeccionMateria INNER JOIN ";
            command.CommandText = command.CommandText + "Profesor ON SeccionMateria.fk_Profesor = Profesor.id_Cedula INNER JOIN ";
            command.CommandText = command.CommandText + "Materia ON SeccionMateria.fk_Materia = "+codigo;
            */

            command.CommandText = "SELECT Profesor.* FROM Escuela INNER JOIN ";
            command.CommandText = command.CommandText + "EscuelaProfesor ON " + miEscuela + " = EscuelaProfesor.fk_Escuela INNER JOIN ";
            command.CommandText = command.CommandText + "Profesor ON EscuelaProfesor.fk_Profesor = Profesor.id_Cedula INNER JOIN ";
            command.CommandText = command.CommandText + "SeccionMateria ON Profesor.id_Cedula = SeccionMateria.fk_Profesor INNER JOIN ";
            command.CommandText = command.CommandText + "Materia ON SeccionMateria.fk_Materia = " + codigo;

            command.CommandTimeout = 10;
            try
            {
                conex.AbrirConexionBd();
                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    Profesor profe = new Profesor();
                    profe.Cedula = reader.GetInt32(0);
                    profe.Nombre = reader["nombreProfesor"].ToString();
                    profe.Apellido = reader["apellidoProfesor"].ToString();
                    profe.Crn = reader.GetInt32(3);
                    profe.Email = reader["emailProfesor"].ToString();
                    profe.FechaNacimiento = reader.GetDateTime(5);
                    profe.Sexo = reader["sexoProfesor"].ToString();
                    profe.Telefono = reader["telefonoProfesor"].ToString();
                    profe.TiempoLaboral = reader["contratoProfesor"].ToString();
                    profe.Estatus = reader["estadoProfesor"].ToString();
                    profesor = profe;
                }
                reader.Close();
                return profesor;
            }
            catch (SqlException ex)
            {
                return null;
            }
            catch (Exception ex)
            {
                return null;
            }
            finally
            {
                conex.CerrarConexionBd();
            }
        }
        #endregion ConsultarPorMateriaProfesor

        #region AgregarProfesorEscuela .. no encuentro quien lo usa
        public bool AgregarProfesorEscuela(string values)
        {
            SqlCommand comando = new SqlCommand();
            String sql = "INSERT INTO Escuela_Profesor(fechaInicio,fechaFin,cargo,fk_id_escuela,fk_id_profesor) ";
            sql = sql + "VALUES " + values;
            comando.CommandText = sql;
            comando.Connection = conex.ObjetoConexion();
            try
            {
                conex.AbrirConexionBd();
                comando.ExecuteNonQuery();
                return true;
            }
            catch (SqlException ex)
            {
                return false;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally
            {
                conex.CerrarConexionBd();
            }
        }
        #endregion AgregarProfesorEscuela

        #region agregarProfesor solo lo usa PruebaEnlaceDatosProfesor
        public bool agregarProfesor(string values)
        {
            SqlCommand comando = new SqlCommand();
            String sql = "INSERT INTO Profesor(id_cedula,nombreProfesor,apellidoProfesor,crnProfesor,fechaNac,sexoProfesor,";
            sql = sql + "telefonoProfesor,contratoProfesor,estadoProfesor,espacioMaxCarga,espacioUtilizado,emailProfesor)";
            sql = sql + "VALUES " + values;
            comando.CommandText = sql;
            comando.Connection = conex.ObjetoConexion();
            try
            {
                conex.AbrirConexionBd();
                comando.ExecuteNonQuery();
                return false;
            }
            catch (Exception)
            {
                return true;
            }
            finally
            {
                conex.CerrarConexionBd();
            }
        }
        #endregion AgregarProfesor

        #region AgregarProfesor
        public bool AgregarProfesor(string values)
        {
            SqlCommand comando = new SqlCommand();
            String sql = "INSERT INTO Profesor(id_cedula,nombreProfesor,apellidoProfesor,crnProfesor,fechaNac,sexoProfesor,";
            sql = sql + "telefonoProfesor,contratoProfesor,estadoProfesor,espacioMaxCarga,espacioUtilizado)";
            sql = sql + "VALUES " + values;
            comando.CommandText = sql;
            comando.Connection = conex.ObjetoConexion();
            try
            {
                conex.AbrirConexionBd();
                comando.ExecuteNonQuery();
                return true;
            }
            catch (SqlException ex)
            {
                return false;
            }
            catch (Exception ex)
            {
                return false;
            }
            finally
            {
                conex.CerrarConexionBd();
            }
        }
        #endregion AgregarProfesor

        #region EliminarProfesor solo lo usa PruebaEnlaceDatosProfesor
        public bool eliminarProfesor(string cedula)
        {
            SqlCommand comando = new SqlCommand();
            String sql = "DELETE FROM Profesor WHERE id_cedula = " + cedula;
            comando.CommandText = sql;
            comando.Connection = conex.ObjetoConexion();
            try
            {
                conex.AbrirConexionBd();
                comando.ExecuteNonQuery();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
            finally
            {
                conex.CerrarConexionBd();
            }
        }
        #endregion EliminarProfesor

        #region ModificarProfesor usado por materia y profesor
        public bool ModificarProfesor(Profesor miProfesor, string miFecha)
        {


            SqlCommand comando = new SqlCommand();
            String sql = "UPDATE Profesor SET nombreProfesor='" + miProfesor.Nombre + "', apellidoProfesor='" + miProfesor.Apellido + "', emailProfesor='";
            sql = sql + miProfesor.Email + "',contratoProfesor='" + miProfesor.TiempoLaboral + "',fechaNac ='" + miFecha;
            sql = sql + "',telefonoProfesor='" + miProfesor.Telefono + "',sexoProfesor='" + miProfesor.Sexo + "',estadoProfesor='" + miProfesor.Estatus;
            sql = sql + "' WHERE id_Cedula=" + miProfesor.Cedula;
            comando.CommandText = sql;
            comando.Connection = conex.ObjetoConexion();
            try
            {
                conex.AbrirConexionBd();
                comando.ExecuteNonQuery();
            }
            catch (Exception)
            {
                return false;
            }
            finally
            {
                conex.CerrarConexionBd();
            }

            return true;
        }
        #endregion ModificarProfesor

        #region InactivarProfesor usado por profesor
        public bool inactivarProfesor(Profesor miProfesor)
        {


            SqlCommand comando = new SqlCommand();
            String sql = "UPDATE Profesor SET estadoProfesor='Inactivo' ";
            sql = sql + "WHERE id_Cedula=" + miProfesor.Cedula;
            comando.CommandText = sql;
            comando.Connection = conex.ObjetoConexion();
            try
            {
                conex.AbrirConexionBd();
                comando.ExecuteNonQuery();
            }
            catch (Exception)
            {
                return false;
            }
            finally
            {
                conex.CerrarConexionBd();
            }

            return true;
        }
        #endregion InactivarProfesor

        #region ConsultarProfesoresActivos usado por Profesor
        public List<Profesor> ConsultarProfesoresActivos(string miEscuela)
        {
            List<Profesor> listaProfe = new List<Profesor>();

            SqlCommand command = new SqlCommand();

            conex.AbrirConexionBd();
            command.Connection = conex.ObjetoConexion();
            command.CommandType = System.Data.CommandType.Text;
            command.CommandText = "SELECT DISTINCT Profesor.* FROM Escuela INNER JOIN EscuelaProfesor ON ";
            command.CommandText = command.CommandText + miEscuela + " = EscuelaProfesor.fk_Escuela INNER JOIN Profesor ON EscuelaProfesor.fk_Profesor ";
            command.CommandText = command.CommandText + "= Profesor.id_Cedula ";
            command.CommandText = command.CommandText + "WHERE (Profesor.estadoProfesor = 'Activo')";
            command.CommandTimeout = 10;

            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                Profesor profe = new Profesor();
                profe.Cedula = reader.GetInt32(0);
                profe.Nombre = reader["nombreProfesor"].ToString();
                profe.Apellido = reader["apellidoProfesor"].ToString();
                profe.Crn = reader.GetInt32(3);
                profe.Email = reader["emailProfesor"].ToString();
                profe.FechaNacimiento = reader.GetDateTime(5);
                profe.Sexo = reader["sexoProfesor"].ToString();
                profe.Telefono = reader["telefonoProfesor"].ToString();
                profe.TiempoLaboral = reader["contratoProfesor"].ToString();
                profe.Estatus = reader["estadoProfesor"].ToString();


                listaProfe.Add(profe);

            }
            reader.Close();
            conex.CerrarConexionBd();
            return listaProfe;
        }
        #endregion ConsultarProfesoresActivos

        #region ConsultarMiUniversidad usado por profesor
        public Universidad ConsultarMiUniversidad(String id_Universidad)
        {


            SqlCommand command = new SqlCommand();
            command.Connection = conex.ObjetoConexion();
            command.CommandType = System.Data.CommandType.Text;
            command.CommandText = "SELECT id_Universidad, nombre FROM Universidad WHERE id_Universidad = " + id_Universidad;
            command.CommandTimeout = 10;
            try
            {
                conex.AbrirConexionBd();
                SqlDataReader reader = command.ExecuteReader();

                if (reader.Read())
                {
                    Universidad miUniversidad = new Universidad();
                    miUniversidad.IdUniv = reader.GetInt32(0);
                    miUniversidad.Nombre = reader["nombre"].ToString();
                    return miUniversidad;
                }
                reader.Close();
                return null;
            }
            catch (Exception)
            {
                return null;
            }
            finally
            {
                conex.CerrarConexionBd();
            }
        }
        #endregion ConsultarMiUniversidad

        #region ConsultarProfesorPorUniversidad usado por profesor
        public List<Profesor> ConsultarProfesorUniversidad(String id_Universidad)
        {

            Profesor miProfesor = new Profesor();
            List<Profesor> misProfesores = new List<Profesor>();
            SqlCommand command = new SqlCommand();
            command.Connection = conex.ObjetoConexion();
            command.CommandType = System.Data.CommandType.Text;
            command.CommandText = "SELECT DISTINCT Profesor.* FROM Universidad ";
            command.CommandText = command.CommandText + " INNER JOIN Escuela ON Universidad.id_Universidad = Escuela.fk_Universidad INNER ";
            command.CommandText = command.CommandText + "JOIN EscuelaProfesor ON Escuela.id_Escuela = EscuelaProfesor.fk_Escuela INNER ";
            command.CommandText = command.CommandText + "JOIN Profesor ON EscuelaProfesor.fk_Profesor = Profesor.id_Cedula ";
            command.CommandText = command.CommandText + " WHERE (Universidad.id_Universidad = " + id_Universidad;
            command.CommandText = command.CommandText + ") ORDER BY Profesor.apellidoProfesor";
            command.CommandTimeout = 10;
            try
            {
                conex.AbrirConexionBd();
                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    Profesor profe = new Profesor();
                    profe.Cedula = reader.GetInt32(0);
                    profe.Nombre = reader["nombreProfesor"].ToString();
                    profe.Apellido = reader["apellidoProfesor"].ToString();
                    profe.Crn = reader.GetInt32(3);
                    profe.Email = reader["emailProfesor"].ToString();
                    profe.FechaNacimiento = reader.GetDateTime(5);
                    profe.Sexo = reader["sexoProfesor"].ToString();
                    profe.Telefono = reader["telefonoProfesor"].ToString();
                    profe.TiempoLaboral = reader["contratoProfesor"].ToString();
                    profe.Estatus = reader["estadoProfesor"].ToString();

                    misProfesores.Add(profe);

                }

                reader.Close();
                return misProfesores;
            }
            catch (Exception)
            {
                return null;
            }
            finally
            {
                conex.CerrarConexionBd();
            }
        }
        #endregion ConsultarProfesorPorUniversidad

        #region ConsultarMisEscuelas usado solo por ConsultarProfesorUniversidad
        public List<Escuela> ConsultarMisEscuelas(Profesor miProfesor)
        {

            List<Escuela> misEscuelas = new List<Escuela>();
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "SELECT Escuela.nombre FROM Profesor INNER JOIN EscuelaProfesor ON ";
            comando.CommandText = comando.CommandText + " Profesor.id_Cedula = EscuelaProfesor.fk_Profesor INNER JOIN ";
            comando.CommandText = comando.CommandText + " Escuela ON EscuelaProfesor.fk_Escuela = Escuela.id_Escuela ";
            comando.CommandText = comando.CommandText + " WHERE(Profesor.id_Cedula =" + miProfesor.Cedula.ToString() + ")";
            comando.CommandTimeout = 10;
            comando.Connection = conex.ObjetoConexion();

            try
            {
                conex.AbrirConexionBd();
                SqlDataReader reader = comando.ExecuteReader();

                while (reader.Read())
                {
                    Escuela miEscuela = new Escuela();
                    miEscuela.NombreEscuela = reader["nombre"].ToString();
                    misEscuelas.Add(miEscuela);
                }

            }
            catch (Exception)
            {
                return null;
            }
            finally
            {
                conex.CerrarConexionBd();
            }

            return misEscuelas;
        }
        #endregion ConsultarMisEscuelas

        #region ConsultarMisMaterias usado solo en ConsultarProfesorUniversidad
        public List<Materia> ConsultarMisMaterias(Profesor miProfesor)
        {

            List<Materia> misMaterias = new List<Materia>();
            SqlCommand comando = new SqlCommand();
            comando.CommandText = "SELECT DISTINCT Materia.nombreMateria FROM Profesor INNER JOIN ";
            comando.CommandText = comando.CommandText + " SeccionMateria ON Profesor.id_Cedula = SeccionMateria.fk_Profesor INNER JOIN";
            comando.CommandText = comando.CommandText + " Materia ON SeccionMateria.fk_Materia = Materia.id_Materia";
            comando.CommandText = comando.CommandText + " WHERE (Profesor.id_Cedula = " + miProfesor.Cedula.ToString() + ")";
            comando.CommandTimeout = 10;
            comando.Connection = conex.ObjetoConexion();

            try
            {
                conex.AbrirConexionBd();
                SqlDataReader reader = comando.ExecuteReader();

                while (reader.Read())
                {
                    Materia miMateria = new Materia();
                    miMateria.Nombre = reader["nombreMateria"].ToString();
                    misMaterias.Add(miMateria);
                }

            }
            catch (Exception)
            {
                return null;
            }
            finally
            {
                conex.CerrarConexionBd();
            }

            return misMaterias;
        }
    
        #endregion ConsultarMisMaterias

        #region GRUPO 8
        #region Insertar Profesor
        
        // ingresa una escuela en la base de datos a traves de la llmada de un stored procedure que es InsertarEscuela
        //retorna el id de la escuela insertada

        public int InsertarProfesor(Profesor profesor, int _idEscuela)
        {
            //Se instancia un objeto de tipo Conexion y un objeto de tipo SqlCommand, para hacer la conexion a la base de datos 
            Conexion conexion = new Conexion();
            SqlCommand command = new SqlCommand();


            try
            {
                //Se abre la conexion a la base de datos
                conexion.AbrirConexionBd();
                //se introducen los datos de la conexion y el nombre del stored procedure a utilizar
                command.Connection = conexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[InsertarProfesor]";
                command.CommandTimeout = 10;

                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@id_Cedula", profesor.Cedula);
                command.Parameters.AddWithValue("@nacionalidad", profesor.Nacionalidad);
                command.Parameters.AddWithValue("@nombreProfesor", profesor.Nombre);
                command.Parameters.AddWithValue("@apellidoProfesor", profesor.Apellido);
                command.Parameters.AddWithValue("@emailProfesor", profesor.Email);
                command.Parameters.AddWithValue("@fechaNac", profesor.FechaNacimiento);
                command.Parameters.AddWithValue("@sexoProfesor", profesor.Sexo);
                command.Parameters.AddWithValue("@telefonoProfesor", profesor.Telefono);
                command.Parameters.AddWithValue("@fk_Escuela", _idEscuela);
                command.Parameters.AddWithValue("@fechaInicio", profesor.FechaInicio);
                command.Parameters.AddWithValue("@fechaFin", profesor.FechaFin);
                command.Parameters.AddWithValue("@cargo", profesor.Cargo);
                command.Parameters.AddWithValue("@contratoProfesor", profesor.TiempoLaboral);
                //command.Parameters.AddWithValue("@estadoProfesor", profesor.Estatus);
                command.Parameters.AddWithValue("@profesorInsertado", SqlDbType.Int);
       
                command.Parameters["@id_Cedula"].Direction = ParameterDirection.Input;
                command.Parameters["@nacionalidad"].Direction = ParameterDirection.Input;
                command.Parameters["@nombreProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@apellidoProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@emailProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@fechaNac"].Direction = ParameterDirection.Input;
                command.Parameters["@sexoProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@telefonoProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@fk_Escuela"].Direction = ParameterDirection.Input;
                command.Parameters["@fechaInicio"].Direction = ParameterDirection.Input;
                command.Parameters["@fechaFin"].Direction = ParameterDirection.Input;
                command.Parameters["@cargo"].Direction = ParameterDirection.Input;
                command.Parameters["@contratoProfesor"].Direction = ParameterDirection.Input;
               // command.Parameters["@estadoProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@profesorInsertado"].Direction = ParameterDirection.Output;
                


                // se ejecuta el comando, se ejecuta el stored procedure InsertarEscuela
                command.ExecuteReader();

                //se obtiene el parametro de salida que es el id de la escuela insertada
                int profesorInsertado = (int)command.Parameters["@profesorInsertado"].Value;

                return profesorInsertado;
            }
            catch (SqlException)
            {
                return 0;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return 0;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                conexion.CerrarConexionBd();
            }
        }
        #endregion Final de la funcion InsertarEscuela

        #region ListaProfesoresPorEscuela

        public List<Profesor> ListaProfesoresPorEscuela(int idEscuela)
        {
            // se instancia un objeto de tipo conexion y otro de tipo sqlComand
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            List<Profesor> listaProfesor = new List<Profesor>();

            try
            {
                //se abre una conexion a la bd vudu
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                // Se indica el nombre del store procedure
                command.CommandText = "[dbo].[ConsultarProfesoresPorEscuela]";
                command.CommandTimeout = 10;

                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@idEscuela", idEscuela);
                //Se indica que es un parametro de entrada
                command.Parameters["@idEscuela"].Direction = ParameterDirection.Input;

                reader = command.ExecuteReader();
                // guarda registro a registro cada objeto de tipo escuela en la lista
                while (reader.Read())
                {

                    Profesor profesor = new Profesor();
           
                    profesor.Crn = reader.GetInt32(0);
                    profesor.Apellido = reader.GetString(1);
                    profesor.Nombre = reader.GetString(2);
                    profesor.Cedula = reader.GetInt32(3);
                    profesor.FechaNacimiento = reader.GetDateTime(4);
                    profesor.Telefono = reader.GetString(5);
                    profesor.Email = reader.GetString(6);
                    profesor.Cargo = reader.GetString(7);
                    profesor.TiempoLaboral = reader.GetString(8);
                    profesor.Nacionalidad = reader.GetString(9);
                    profesor.Sexo = reader.GetString(10);
                    profesor.FechaInicio = reader.GetDateTime(11);
                    profesor.FechaFin = reader.GetDateTime(12);

                    listaProfesor.Add(profesor);

                }

                return listaProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;                
            }
                //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        #endregion ListaProfesoresPorEscuela

        #region ListaProfesoresPorEscuela y Por Materia

        public List<Profesor> ListaProfesoresPorEscuelaMateria(int idEscuela, string nombreMateria)
        {
            // se instancia un objeto de tipo conexion y otro de tipo sqlComand
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            List<Profesor> listaProfesor = new List<Profesor>();

            try
            {
                //se abre una conexion a la bd vudu
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                // Se indica el nombre del store procedure
                command.CommandText = "[dbo].[ConsultarProfesoresPorMateria]";
                command.CommandTimeout = 10;

                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@idEscuela", idEscuela);
                command.Parameters.AddWithValue("@nombreMateria", nombreMateria);
                //Se indica que es un parametro de entrada
                command.Parameters["@idEscuela"].Direction = ParameterDirection.Input;
                command.Parameters["@nombreMateria"].Direction = ParameterDirection.Input;

                reader = command.ExecuteReader();
                // guarda registro a registro cada objeto de tipo escuela en la lista
                while (reader.Read())
                {
                    Profesor profesor = new Profesor();

                    profesor.Crn = reader.GetInt32(0);
                    profesor.Apellido = reader.GetString(1);
                    profesor.Nombre = reader.GetString(2);
                    profesor.Cedula = reader.GetInt32(3);
                    profesor.FechaNacimiento = reader.GetDateTime(4);
                    profesor.Telefono = reader.GetString(5);
                    profesor.Email = reader.GetString(6);
                    profesor.Cargo = reader.GetString(7);
                    profesor.TiempoLaboral = reader.GetString(8);
                    profesor.Nacionalidad = reader.GetString(9);
                    profesor.Sexo = reader.GetString(10);
                    profesor.FechaInicio = reader.GetDateTime(11);
                    profesor.FechaFin = reader.GetDateTime(12);

                    listaProfesor.Add(profesor);

                }

                return listaProfesor;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }

        #endregion ListaProfesoresPorEscuela

        #region ConsultarProfesor

        public Profesor ConsultarProfesor(int idEscuela)
        {
            //  instancia de un objeto de tipo conexion para acceder a la bd
            //  instancia de un objeto de tipo sqlCommand 
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            try
            {
                //  se abre la conexion a bd vudu
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarProfesor]";
                command.CommandTimeout = 10;

                //  variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idEscuela", idEscuela);
        
                // Se indica que es un parametro de entrada
                command.Parameters["@idEscuela"].Direction = ParameterDirection.Input;

                //se carga la informacion consultada en un objeto de tipo Escuela
                Profesor profesorConsultado = new Profesor();
                reader = command.ExecuteReader();
                if (reader.Read())
                {
                    profesorConsultado.Crn = reader.GetInt32(0);
                    profesorConsultado.Apellido = reader.GetString(1);
                    profesorConsultado.Nombre = reader.GetString(2);
                    profesorConsultado.Nacionalidad = reader.GetString(3);
                    profesorConsultado.Cedula = reader.GetInt32(4);
                    profesorConsultado.Email = reader.GetString(5);
                    profesorConsultado.FechaNacimiento = reader.GetDateTime(6);
                    profesorConsultado.Telefono = reader.GetString(6);
                    profesorConsultado.Cargo = reader.GetString(7);
                    profesorConsultado.TiempoLaboral = reader.GetString(8);
                    profesorConsultado.FechaInicio = reader.GetDateTime(9);
                    profesorConsultado.FechaFin = reader.GetDateTime(10);
   
                }
                return profesorConsultado;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;                
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }
        #endregion 

        #region Eliminar Profesor
        public bool EliminarProfesor(int idProfesor, int idEscuela)
        {
            //se instancia un objeto de tipo conexion y sqlCommand
            //estos se utilizan para acceder a base de datos y ejecutar el stored procedure en sql server
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            try
            {
                //se abre una conexion a base de datos
                miConexion.AbrirConexionBd();
                // se completa el objeto comando, con la informacion de la conexion , variables, y nombre del stored procedure.
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[EliminarProfesor]";
                command.CommandTimeout = 10;
                //variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idProfesor", idProfesor);
                command.Parameters.AddWithValue("@idEscuela", idEscuela);
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@idEscuela"].Direction = ParameterDirection.Input;
                //se ejecuta el comando
                command.ExecuteReader();
                return true;
            }
            catch (SqlException)
            {
                return false;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return false;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                miConexion.CerrarConexionBd();
            }
        }

        #endregion

        #region Lista de Materias de un Profesor
        public List<SeccionMateria> ListaMateriasAsignadas(int idProfesor, int idEscuela)
        {
            // se instancia un objeto de tipo conexion y otro de tipo sqlComand
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            List<SeccionMateria> listaMaterias = new List<SeccionMateria>();

            try
            {
                //se abre una conexion a la bd vudu
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                // Se indica el nombre del store procedure
                command.CommandText = "[dbo].[ConsultarListaMateriasProfesor]";
                command.CommandTimeout = 10;

                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@idProfesor", idProfesor);
                command.Parameters.AddWithValue("@idEscuela", idEscuela);
                
                //Se indica que es un parametro de entrada
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;

                reader = command.ExecuteReader();
                // guarda registro a registro cada objeto de tipo escuela en la lista
                while (reader.Read())
                {

                    SeccionMateria seccionMateria = new SeccionMateria();

                    seccionMateria.Materia.Nombre = reader.GetString(0);
                    seccionMateria.Codigo = reader.GetInt32(1);

                    listaMaterias.Add(seccionMateria);

                }

                return listaMaterias;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }
        #endregion
      
        #region Modificar Profesor
        public int ModificarProfesorDeUnaEscuela(Profesor profesor, int idEscuela)
        {
            // se instancian conexion y sqlcomand para poder abrir la conexion
            Conexion conexion = new Conexion();
            SqlCommand command = new SqlCommand();
            try
            {
                //Se abre la conexion a la base de datos
                conexion.AbrirConexionBd();
                //se introducen los datos de la conexion y el nombre del stored procedure a utilizar
                command.Connection = conexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ModificarProfesor]";
                command.CommandTimeout = 10;

                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@id_escuela", idEscuela);
                command.Parameters.AddWithValue("@id_profesor", profesor.Crn);
                command.Parameters.AddWithValue("@nombre", profesor.Nombre);
                command.Parameters.AddWithValue("@apellido", profesor.Apellido);
                command.Parameters.AddWithValue("@email", profesor.Email);
                command.Parameters.AddWithValue("@fechaNac", profesor.FechaNacimiento);
                command.Parameters.AddWithValue("@sexo", profesor.Sexo);
                command.Parameters.AddWithValue("@telefono", profesor.Telefono);
                command.Parameters.AddWithValue("@fechaInicio", profesor.FechaInicio);
                command.Parameters.AddWithValue("@fechafin", profesor.FechaFin);
                command.Parameters.AddWithValue("@cargo", profesor.Cargo);
                command.Parameters.AddWithValue("@contrato", profesor.TiempoLaboral);
                command.Parameters.AddWithValue("@profesorModificado", SqlDbType.Int);

                command.Parameters["@id_escuela"].Direction = ParameterDirection.Input;
                command.Parameters["@id_profesor"].Direction = ParameterDirection.Input;
                command.Parameters["@nombre"].Direction = ParameterDirection.Input;
                command.Parameters["@apellido"].Direction = ParameterDirection.Input;
                command.Parameters["@email"].Direction = ParameterDirection.Input;
                command.Parameters["@fechaNac"].Direction = ParameterDirection.Input;
                command.Parameters["@sexo"].Direction = ParameterDirection.Input;
                command.Parameters["@telefono"].Direction = ParameterDirection.Input;
                command.Parameters["@fechaInicio"].Direction = ParameterDirection.Input;
                command.Parameters["@fechafin"].Direction = ParameterDirection.Input;
                command.Parameters["@cargo"].Direction = ParameterDirection.Input;
                command.Parameters["@contrato"].Direction = ParameterDirection.Input;
                command.Parameters["@profesorModificado"].Direction = ParameterDirection.Output;

                // se ejecuta el comando, se ejecuta el stored procedure InsertarEscuela
                command.ExecuteReader();

                //se obtiene el parametro de salida que es el id de la escuela insertada
                int profesorModificado = (int)command.Parameters["@profesorModificado"].Value;

                return profesorModificado;
            }
            catch (SqlException)
            {
                return 0;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return 0;
            }
            // se cierra la conexion independientemente si fue exitosa o no la eliminacion.
            finally
            {
                conexion.CerrarConexionBd();
            }
        }
        #endregion 

        #region Consultar Profesores Existentes
        //Consulta el profesor que se encuentran en la tabla Profesores pero que no estan asignados a ninguna escuela
        //y los profesores que estan en otras escuelas
        public Profesor ConsultarProfesorExistente( int cedProfesor, int idEscuela )
        {
            //  instancia de un objeto de tipo conexion para acceder a la bd
            //  instancia de un objeto de tipo sqlCommand 
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
         
            try
            {
                //  se abre la conexion a bd vudu
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarProfesorExistente]";
                command.CommandTimeout = 10;

                //  variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@cedulaProfesor", cedProfesor);
                command.Parameters.AddWithValue("@idEscuela", idEscuela);

                // Se indica que es un parametro de entrada
                command.Parameters["@cedulaProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@idEscuela"].Direction = ParameterDirection.Input;

                //se carga la informacion consultada en un objeto de tipo Escuela
                Profesor profesorConsultado = new Profesor();
                reader = command.ExecuteReader();
                if (reader.Read())
                {
                    profesorConsultado.Crn = reader.GetInt32(0);
                    profesorConsultado.Apellido = reader.GetString(1);
                    profesorConsultado.Nombre = reader.GetString(2);
                    profesorConsultado.Nacionalidad = reader.GetString(3);
                    profesorConsultado.Cedula = reader.GetInt32(4);
                    profesorConsultado.Email = reader.GetString(5);
                    profesorConsultado.FechaNacimiento = reader.GetDateTime(6);
                    profesorConsultado.Telefono = reader.GetString(7);
                }
                return profesorConsultado;
            }
            catch (SqlException)
            {
                return null;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return null;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }
        #endregion

        #region Agregar Profesor Existente
        // Agrega un profesor de otra escuela en la escuela actual y se llenan los campos de escuela profesor
        public int AgregarProfesorExistente(Profesor profesor, int idEscuela)
        {
            //  instancia de un objeto de tipo conexion para acceder a la bd
            //  instancia de un objeto de tipo sqlCommand 
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;

            try
            {
                //  se abre la conexion a bd vudu
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[AgregarProfesorExistente]";
                command.CommandTimeout = 10;

                //  variables del stored procedure de sql server.
                command.Parameters.AddWithValue("@idProfesor", profesor.Cedula);
                command.Parameters.AddWithValue("@idEscuela", idEscuela);
                command.Parameters.AddWithValue("@fechaInicio", profesor.FechaInicio);
                command.Parameters.AddWithValue("@fechaFin", profesor.FechaFin);
                command.Parameters.AddWithValue("@cargo", profesor.Cargo);
                command.Parameters.AddWithValue("@contratoProfesor", profesor.TiempoLaboral);
                command.Parameters.AddWithValue("@idescuelaProfesor", SqlDbType.Int);

                // Se indica que es un parametro de entrada
                command.Parameters["@idProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@idEscuela"].Direction = ParameterDirection.Input;
                command.Parameters["@fechaInicio"].Direction = ParameterDirection.Input;
                command.Parameters["@fechaFin"].Direction = ParameterDirection.Input;
                command.Parameters["@cargo"].Direction = ParameterDirection.Input;
                command.Parameters["@contratoProfesor"].Direction = ParameterDirection.Input;
                command.Parameters["@idescuelaProfesor"].Direction = ParameterDirection.Output;


                // se ejecuta el comando, se ejecuta el stored procedure InsertarProfesorEscuela
                command.ExecuteReader();

                //se obtiene el parametro de salida que es el id de escuelaProfesor
                int Insertado = (int)command.Parameters["@idescuelaProfesor"].Value;

                return Insertado;
            }
            catch (SqlException)
            {
                return 0;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return 0;
            }
            //se cierra la conexion independientemente de que se haya detectado o no una excepcion.
            finally
            {
                if (reader != null)
                    reader.Close();
                miConexion.CerrarConexionBd();
            }
        }
        #endregion

        #region Consultar Materias Por Escuela ( dropdown list ) 
        public List<Materia> ConsultarMateriasEscuelaG8(int idEscuela)
        {
            SqlCommand command = new SqlCommand();
            List<Materia> lista = new List<Materia>();
            Conexion miConexion = new Conexion();
            try
            {
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarMateriasEscuelaG8]";
                command.CommandTimeout = 10;
                command.Parameters.AddWithValue("@idEscuela", idEscuela);
                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    Materia materia = new Materia();
                    materia.Nombre = reader.GetString(0);
                    lista.Add(materia);
                }
                reader.Close();
            }
            catch (Exception)
            {

            }
            finally
            {
                miConexion.CerrarConexionBd();
            }

            return lista;
        }
        #endregion      
        
        #region Modificar Profesor de la Sesion 
        // Modifica solo los datos personales de propios de un profesor que ha iniciadoo sesion 
        public int ModificarMiPerfilProfesor(Profesor profesor)
        {
            // se instancian conexion y sqlcomand para poder abrir la conexion
            Conexion conexion = new Conexion();
            SqlCommand command = new SqlCommand();
            try
            {
                //Se abre la conexion a la base de datos
                conexion.AbrirConexionBd();
                //se introducen los datos de la conexion y el nombre del stored procedure a utilizar
                command.Connection = conexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ModificarPerfilProfesor]";
                command.CommandTimeout = 10;

                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@id_profesor", profesor.Crn);
                command.Parameters.AddWithValue("@nombre", profesor.Nombre);
                command.Parameters.AddWithValue("@apellido", profesor.Apellido);
                command.Parameters.AddWithValue("@email", profesor.Email);
                command.Parameters.AddWithValue("@fechaNac", profesor.FechaNacimiento);
                command.Parameters.AddWithValue("@sexo", profesor.Sexo);
                command.Parameters.AddWithValue("@telefono", profesor.Telefono);
                command.Parameters.AddWithValue("@profesorModificado", SqlDbType.Int);

                command.Parameters["@id_profesor"].Direction = ParameterDirection.Input;
                command.Parameters["@nombre"].Direction = ParameterDirection.Input;
                command.Parameters["@apellido"].Direction = ParameterDirection.Input;
                command.Parameters["@email"].Direction = ParameterDirection.Input;
                command.Parameters["@fechaNac"].Direction = ParameterDirection.Input;
                command.Parameters["@sexo"].Direction = ParameterDirection.Input;
                command.Parameters["@telefono"].Direction = ParameterDirection.Input;
                command.Parameters["@profesorModificado"].Direction = ParameterDirection.Output;

                // se ejecuta el comando, se ejecuta el stored procedure InsertarEscuela
                command.ExecuteReader();

                //se obtiene el parametro de salida que es el id de la escuela insertada
                int profesorModificado = (int)command.Parameters["@profesorModificado"].Value;

                return profesorModificado;
            }
            catch (SqlException)
            {
                return 0;
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.StackTrace);
                System.Console.ReadLine();
                return 0;
            }
            // se cierra la conexion independientemente si fue exitosa o no la eliminacion.
            finally
            {
                conexion.CerrarConexionBd();
            }
        }
        #endregion         
        #endregion
        #region metodo Grupo 3:Consultar Materias Por Escuela ( dropdown list )
        public List<Materia> ConsultarMateriasEscuela(int idEscuela)
        {
            SqlCommand command = new SqlCommand();
            List<Materia> lista = new List<Materia>();
            Conexion miConexion = new Conexion();
            try
            {
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ConsultarMateriasEscuela]";
                command.CommandTimeout = 10;
                command.Parameters.AddWithValue("@idEscuela", idEscuela);
                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    Materia materia = new Materia();
                    materia.Nombre = reader.GetString(0);
                    lista.Add(materia);
                }
                reader.Close();
            }
            catch (Exception)
            {

            }
            finally
            {
                miConexion.CerrarConexionBd();
            }

            return lista;
        }
        #endregion      
        
    }
}